package mcpplus

import (
	"github.com/invopop/jsonschema"
	"reflect"
)

// ToolsAnnotation 标记mcp工具对象的注解
type ToolsAnnotation interface {
	toolsAnnotation()
}

// Tool 标记结构体属性字段类型为工具方法
type Tool interface {
	markTookField()
}

// FuncMapping 函数对象描述
type FuncMapping struct {
	name        string          // 函数名称
	description string          // 函数描述
	rvFunc      reflect.Value   // 函数反射对象
	funcParams  []FuncParamDesc // 函数入参对象列表
}

// FuncParamDesc 函数入参对象
type FuncParamDesc struct {
	definedParamIsPtr bool               // 定义的参数是否为指针类型：true -> 是；false -> 否
	rtParam           reflect.Type       // 参数的 reflect.Type 值
	schema            *jsonschema.Schema // 如果是结构体参数，则该 jsonschema 不为空
	defaultValMap     map[string]string  // 结构体参数的字段默认值，使用default TAG声明 (schema对象已经有了，可能不需要该参数)
	pName             string             // 参数名称（结构体参数为空）
	desc              string             // 参数描述（结构体参数为空）
	required          bool               // 参数是否必填（结构体参数为空）
	defaultVal        string             // 基础参数的默认值（结构体参数为空）
	enum              []string           // 枚举值（结构体参数为空）
	title             string             // title（结构体参数为空）
}
